#include <stdio.h>
#include <math.h>
int IsPrime(int x);
void OutputPrimeFactor(int x);
int main()
{	         	 		 
    int m;
    printf("Input m:");
    scanf("%d", &m);
    if (IsPrime(m))  /* 素数判定 */
    {	         	 		 
        printf("It is a prime number\n");
    }
    else
    {	         	 		 
        printf("%d = ", m);
        OutputPrimeFactor(m); /* 输出x的质因数连乘 */
    }
    return 0;
}	         	 		 
/* 函数功能：判断x是否是素数，若函数返回0，则表示不是素数，若返回1，则代表是素数 */
int IsPrime(int x)
{	         	 		 
    int i, flag = 1;
    int squareRoot = (int)sqrt(x);
    if (x <= 1)   flag = 0;          /* 负数、0和1都不是素数 */
    for (i = 2; i <= squareRoot && flag; i++)
    {	         	 		 
        if (x % i == 0) flag = 0;   /* 若能被整除，则不是素数 */
    }
    return flag;
}	         	 		 
/* 函数功能：输出x的质因数连乘 */
void OutputPrimeFactor(int x)
{	         	 		 
    int i;
    for (i = 2; i < x; i++)
    {	         	 		 
        if (x % i == 0)
        {	         	 		 
            printf("%d * ", i);
            OutputPrimeFactor(x / i); /* 递归调用该函数 */
            return;                    /* 不可以使用break */
        }
    }
    printf("%d", x);                 /* 输出最后一个因子（质因数，不能再分解）*/
}